package com.nettyBasic.n2_eventLoop;

import io.netty.channel.DefaultEventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.util.NettyRuntime;
import lombok.extern.slf4j.Slf4j;

import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * @author： pang-yun
 * @date： 2021-09-11 11:24
 * 功能目的 ：用于 得到 EventLoopGroup
 * next 获取下一个EventLoop
 * submit  executor  执行普通任务
 * scheduleAtFixedRate  定时任务
 */

@Slf4j
public class EventLoopDemo {
    public static void main(String[] args) {
        NioEventLoopGroup nioEventLoopGroup = new NioEventLoopGroup(2);  // io 事件   普通任务  定时任务
        DefaultEventLoopGroup defaultEventLoopGroup = new DefaultEventLoopGroup();  // 可以执行 普通任务 定时任务  但是不能执行 io 事件
        // 获取CPU 数量   如果不再创建时 指定线程  将创建 默认cpu*2
        int i = NettyRuntime.availableProcessors();
        System.out.printf("computer's cpu is %d\n", i);
        // 获取下一个事件的 循环对象
        System.out.println(nioEventLoopGroup.next());
        System.out.println(nioEventLoopGroup.next());
        System.out.println(nioEventLoopGroup.next());

        // 执行普通任务  submit   execute  都可以执行普通任务     开启新的线程
        nioEventLoopGroup.next().execute(() -> {
            log.debug("execute common task");
        });

        AtomicInteger count = new AtomicInteger();
        // 执行定时任务     开启新的线程
        nioEventLoopGroup.next().scheduleAtFixedRate(() -> {
            log.debug("this is schedule task! " + count.getAndIncrement());
        }, 0, 1, TimeUnit.SECONDS);


        log.debug("main is finished!!!");
    }


}
